/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.bodylimit.service;

import br.com.bodylimit.dao.PresencaDAO;
import br.com.bodylimit.dao.DAOFactory;
import br.com.bodylimit.model.Presenca;
import br.com.bodylimit.util.ConnectionFactory;
import java.sql.SQLException;
import br.com.bodylimit.util.Mensagem;
import java.io.File;
import java.io.IOException;
import java.sql.Connection;
import java.util.Date;
import java.util.List;
import java.util.logging.FileHandler;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.logging.SimpleFormatter;

/**
 *
 * @author João Paulo Motta Oliveira Silva
 */
public class PresencaService
{
    Connection con;
    PresencaDAO dao;

     static final Logger logger = Logger.getLogger("br.com.bodylimit.service");

    static {
        logger.setLevel(Level.ALL);
        try {
            FileHandler fh = new FileHandler("logs" + File.separator + "PresencaService.log");
            fh.setFormatter(new SimpleFormatter());
            logger.addHandler(fh);
        } catch(IOException ex) {
            logger.severe("Nao foi possivel criar arquivo de log!");
            ex.printStackTrace();
        }
    }

    public PresencaService() {


    }


    /**
     * Adciona um presenca a base de dados
     * @param presenca a ser adcionado
     * @return true se o presenca foi adcionado
     */
    public boolean adcionar(Presenca presenca)
    {
        try
        {
            con = new ConnectionFactory().getConnection();
            dao = new DAOFactory().getPresencaDAO(con);

            dao.adcionar(presenca);

            con.close();

            return true;
        }
        catch (SQLException ex)
        {
            if(ex.getMessage().contains("presenca_pkey")) {
                Mensagem.msgErro("O aluno já malhou hoje!!");
            } else {
                Mensagem.msgErro("Erro ao adcionar presenca!");
                logger.warning(ex.getMessage());

                try
                {
                    con.close();
                }
                catch (SQLException ex1)
                {
                }
            }

            return false;
        }
    }



    /**
     * Lista todos os presentes na data de hoje
     * @return
     */
    public List<Presenca> listar()
    {
        List<Presenca> presencas = null;

        try
        {
            con = new ConnectionFactory().getConnection();
            dao = new DAOFactory().getPresencaDAO(con);

            presencas = dao.listar();

            con.close();

            return presencas;
        }
        catch (SQLException ex)
        {
            Mensagem.msgErro("Erro ao listar presencas!\n" + ex.getMessage());
            logger.warning(ex.getMessage());

            try
            {
                con.close();
            }
            catch (SQLException ex1)
            {
            }

            return null;
        }
    }

    /**
     * Lista todos os presentes na data
     * @return
     */
    public List<Presenca> listar(Date data)
    {
        List<Presenca> presencas = null;

        try
        {
            con = new ConnectionFactory().getConnection();
            dao = new DAOFactory().getPresencaDAO(con);

            presencas = dao.listar(data);

            con.close();

            return presencas;
        }
        catch (SQLException ex)
        {
            Mensagem.msgErro("Erro ao listar presencas!\n" + ex.getMessage());
            logger.warning(ex.getMessage());

            try
            {
                con.close();
            }
            catch (SQLException ex1)
            {
            }

            return null;
        }
    }


    public boolean remover(Presenca presenca)
    {
        try
        {
            con = new ConnectionFactory().getConnection();
            dao = new DAOFactory().getPresencaDAO(con);

            dao.remover(presenca.getData(), presenca.getAluno().getMatricula());

            con.close();

            return true;
        }
        catch (SQLException ex)
        {
            Mensagem.msgErro("Erro ao remover presenca!\n" + ex.getMessage());
            logger.warning(ex.getMessage());

            try
            {
                con.close();
            }
            catch (SQLException ex1)
            {
            }

            return false;
        }
    }
}